package cn.com.blueInfo.bpm.template.request;

import cn.com.blueInfo.bpm.common.request.BaseDTO;
import cn.com.blueInfo.bpm.common.request.BaseQueryDTO;
import cn.com.blueInfo.bpm.template.enums.ParallelGatewayType;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

/**
 * 并行网关表 接收参数机校验
 * @author suxch
 * @since 2025-08-24 01:41:15
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Schema(description = "并行网关 接收参数及校验")
public class ParallelGatewayDTO extends BaseDTO {

    /** 流程模板ID */
    @NotNull(message = "流程模板ID 不能为空")
    @Schema(description = "流程模板ID")
    private Long processId;
    /** 网关编码（模板内唯一） */
    @NotBlank(message = "网关编码 不能为空")
    @Schema(description = "网关编码（模板内唯一）")
    private String gatewayCode;
    /** 网关名称（如“。。。开始”“。。。结束”） */
    @Schema(description = "网关名称（如“。。。开始”“。。。结束”）")
    private String gatewayName;
    /** 网关类型：PARALLEL_START-并行开始，拆分多个分支；PARALLEL_END-并行结束，合并多个分支 */
    @NotNull(message = "网关类型 不能为空")
    @Schema(description = "网关类型：PARALLEL_START-并行开始，拆分多个分支；PARALLEL_END-并行结束，合并多个分支")
    private ParallelGatewayType gatewayType;
    /** 上一节点ID */
    @NotNull(message = "上一节点ID 不能为空")
    @Schema(description = "上一节点ID")
    private Long prevNodeId;
    /** 合并条件（PARALLEL_END生效，。。。分支完成后合并） */
    @NotBlank(message = "合并条件 不能为空")
    @Schema(description = "合并条件（PARALLEL_END生效，。。。分支完成后合并）")
    private String joinCondition;

    /**
     * 并行网关 接收分页查询参数
     * @author suxch
     * @since 2025-08-21 05:08:55
     */
    @Data
    @EqualsAndHashCode(callSuper = true)
    @Schema(description = "并行网关 接收分页查询参数")
    public static class QueryDTO extends BaseQueryDTO {

        /** 流程模板ID */
        @Schema(description = "流程模板ID")
        private Long processId;
        /** 网关编码（模板内唯一） */
        @Schema(description = "网关编码（模板内唯一）")
        private String gatewayCode;
        /** 网关名称（如“。。。开始”“。。。结束”） */
        @Schema(description = "网关名称（如“。。。开始”“。。。结束”）")
        private String gatewayName;
        /** 网关类型：PARALLEL_START-并行开始，拆分多个分支；PARALLEL_END-并行结束，合并多个分支 */
        @Schema(description = "网关类型：PARALLEL_START-并行开始，拆分多个分支；PARALLEL_END-并行结束，合并多个分支")
        private ParallelGatewayType gatewayType;
        /** 上一节点ID */
        @Schema(description = "上一节点ID")
        private Long prevNodeId;
        /** 合并条件（PARALLEL_END生效，。。。分支完成后合并） */
        @Schema(description = "合并条件（PARALLEL_END生效，。。。分支完成后合并）")
        private String joinCondition;

    }

    /**
     * 并行网关 接收部分更新参数及校验
     * @author suxch
     * @since 2025-08-21 05:08:55
     */
    @Data
    @EqualsAndHashCode(callSuper = true)
    @Schema(description = "并行网关 接收部分更新参数及校验")
    public static class UpdatePartialDTO extends BaseDTO {}

}